package cn.iocoder.yudao.module.system.service.gugu;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.gugu.gugu.ProvinceScoreInfo;
import cn.iocoder.yudao.module.system.controller.admin.gugu.gugu.ProvinceScoreQueryReqVO;
import cn.iocoder.yudao.module.system.controller.admin.gugu.vo.ProvinceScorePageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.gugu.ProvinceScoreDO;

import java.util.List;
import java.util.Map;

/**
 * 历年高考省录取分数线数据 Service 接口
 */
public interface ProvinceScoreService {

    /**
     * 保存省录取分数线数据
     *
     * @param provinceScoreList 省录取分数线数据列表
     * @return 保存成功的数量
     */
    int saveProvinceScoreList(List<ProvinceScoreInfo> provinceScoreList);

    /**
     * 根据省份、年份和学科分类查询省录取分数线数据
     *
     * @param province 省份
     * @param year 年份
     * @param category 学科分类
     * @return 省录取分数线数据列表
     */
    List<ProvinceScoreDO> getProvinceScoreList(String province, Integer year, String category);

    /**
     * 根据省份查询省录取分数线数据
     *
     * @param province 省份
     * @return 省录取分数线数据列表
     */
    List<ProvinceScoreDO> getProvinceScoreByProvince(String province);

    /**
     * 根据年份查询省录取分数线数据
     *
     * @param year 年份
     * @return 省录取分数线数据列表
     */
    List<ProvinceScoreDO> getProvinceScoreByYear(Integer year);

    /**
     * 根据学科分类查询省录取分数线数据
     *
     * @param category 学科分类
     * @return 省录取分数线数据列表
     */
    List<ProvinceScoreDO> getProvinceScoreByCategory(String category);

    /**
     * 分页查询省录取分数线数据
     *
     * @param reqVO 查询条件
     * @return 分页结果
     */
    PageResult<ProvinceScoreDO> getProvinceScorePage(ProvinceScorePageReqVO reqVO);

    /**
     * 检查指定条件的数据是否已存在
     *
     * @param province 省份
     * @param year 年份
     * @param category 学科分类
     * @param scoreBatch 录取批次
     * @return 是否存在
     */
    boolean existsProvinceScore(String province, Integer year, String category, String scoreBatch);

    /**
     * 从API获取省录取分数线数据并保存到数据库
     *
     * @param appkey API密钥
     * @param keyword 省份关键字
     * @param year 年份
     * @param category 学科分类
     * @return 获取结果
     */
    Map<String, Object> fetchAndSaveProvinceScore(String appkey, String keyword, Integer year, String category);

    /**
     * 根据省份、年份、学科分类和录取批次删除数据
     *
     * @param province 省份
     * @param year 年份
     * @param category 学科分类
     * @param scoreBatch 录取批次
     * @return 删除的记录数
     */
    int deleteProvinceScore(String province, Integer year, String category, String scoreBatch);

    /**
     * 根据年份删除数据
     *
     * @param year 年份
     * @return 删除的记录数
     */
    int deleteProvinceScoreByYear(Integer year);

    /**
     * 创建省录取分数线数据
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProvinceScore(ProvinceScoreDO createReqVO);

    /**
     * 更新省录取分数线数据
     *
     * @param updateReqVO 更新信息
     */
    void updateProvinceScore(ProvinceScoreDO updateReqVO);

    /**
     * 删除省录取分数线数据
     *
     * @param id 编号
     */
    void deleteProvinceScore(Long id);

    /**
     * 获得省录取分数线数据
     *
     * @param id 编号
     * @return 省录取分数线数据
     */
    ProvinceScoreDO getProvinceScore(Long id);
}
